Telegram Group Search
😱 Вся правда об увольнениях в IT в 2025-м

Пока все молчат о том, что происходит на рынке, мы решили выяснить реальную картину. Без прикрас и корпоративного пиара.

Но для этого нам нужна ваша помощь! Мы собираем данные от разработчиков, тестировщиков, менеджеров и всех, кто работает в ИТ, чтобы создать честное исследование о:

— реальных причинах массовых увольнений
— судьбе тех, кто остался за бортом IT-рынка
— том, сколько времени сейчас нужно на поиск работы

Почему это важно? Потому что сила в правде. Зная реальную ситуацию, вы сможете лучше понимать тренды рынка и планировать карьеру.

⚡️Пройдите опрос и помогите всему сообществу: https://clc.to/yJ5krg
😡 How to: не писать `__init__`

До Python 3.7, если вы хотели создать объект Coordinate(x=1, y=2), приходилось писать:
class Coordinate:
def __init__(self, x: int, y: int):
self.x = x
self.y = y


Это выглядело нормально. Но:
📍 если убрать класс из API — теряется типизация;
📍 если разрешить создавать объект без данных — получаем некорректные объекты;
📍 если задать поля по умолчанию — объект становится мутируемым;
📍 для валидации нужно усложнять структуру.

Главная проблема

__init__ запускает код при каждом создании объекта, что усложняет работу, особенно если нужны побочные действия (например, открытие файла).

Пример проблемного кода:
class FileReader:
def __init__(self, path: str):
self._fd = fileio.open(path)


Вроде удобно. Но:
📍 Вы не можете передать fd напрямую — нужно городить object.__new__.
📍 Тестировать сложно — надо мокать fileio.open.
📍 Если open становится async, вам уже не обойтись __init__.

Ключевая ошибка: связывать создание объекта с побочными эффектами (например, I/O) — это антипаттерн.

Современное решение

1⃣ Используйте @dataclass для объявления:
@dataclass
class FileReader:
_fd: int # или лучше: FileDescriptor


2⃣ Вынесите создание объекта в @classmethod:
from typing import Self

@dataclass
class FileReader:
_fd: int

@classmethod
def open(cls, path: str) -> Self:
return cls(fileio.open(path))


Теперь создавайте объект так: FileReader.open("file.txt"), а не через __init__.

Это решение поддерживает:
📍 чистую типизацию
📍 возможность перехода на async
📍 множественные фабрики (from_fd, from_buffer, from_resource, ...)

3⃣ Типизируйте примитивы через NewType:
from typing import NewType
FileDescriptor = NewType("FileDescriptor", int)


Используйте в классе:
@dataclass
class FileReader:
_fd: FileDescriptor

@classmethod
def open(cls, path: str) -> Self:
return cls(fileio.open(path)) # пусть возвращает FileDescriptor


Новая практика для классов в Python:
1. Используйте @dataclass.
2. Не пишите __init__ вручную.
3. Добавляйте @classmethod-фабрики (.open(), .from_config(), .from_env()).
4. Используйте NewType.

Это даёт чистый, тестируемый, удобный и расширяемый код.

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👾 AI-агенты — настоящее, о котором все говорят

На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉

Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи!

На обучении вы соберете полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.

🎓 В рамках курса вы научитесь:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой

Разберете реальные кейсы и научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.

Старт 5 июля, а при оплате до 1 июня действует дополнительная скидка и бонус — эксклюзивный лонгрид по API и ML от Proglib.

Начните осваивать тему уже сейчас 👉 https://clc.to/Cttu7A
Библиотека питониста | Python, Django, Flask pinned «👾 AI-агенты — настоящее, о котором все говорят На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉 Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи! На обучении вы соберете полноценные…»
💭 Холивар: f-строки vs .format() vs %

Python предлагает сразу три способа форматирования строк — и у каждого есть свои фанаты.

Разбираемся по фактам:

🔎 f-строки (Python 3.6+):
name = "Alice"
age = 30
print(f"{name} is {age} years old.")


читаемо, лаконично
быстрее при выполнении
🙅‍♂️ не работает в Python < 3.6
🙅‍♂️ неудобно при кавычках внутри строк

🔎 .format():
name = "Alice"
age = 30
print("{} is {} years old.".format(name, age))


кросс-версионно (Python 2.7+ и 3.x)
хорош для шаблонов и повторов
🙅‍♂️ длиннее, особенно с ключами
🙅‍♂️ легко запутаться с порядком аргументов

🔎 Cтарый стиль %:
name = "Alice"
age = 30
print("%s is %d years old." % (name, age))


кратко для простых случаев
работает даже в старом Python
🙅‍♂️ типобезопасность на минималках
🙅‍♂️ легко сломать, особенно при refactoring’е

Выбор зависит от контекста:
🔘 f-строки — выбор для современного Python-кода
🔘 .format() — для совместимости и шаблонов
🔘 % — для ностальгирующих и логов

А вы что используете чаще всего?

❤️ f-строки — будущее уже здесь
👍 .format() / % — стабильность и привычка

P.S. Инструкция, как оставить коммент

Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
♻️ Garbage Collector в Python — как он реально работает

Python сам управляет памятью, но делает это не одним, а двумя способами одновременно:

1⃣ Подсчёт ссылок (Reference Counting)

Каждый объект в Python хранит число ссылок на себя:
import sys

a = []
print(sys.getrefcount(a)) # покажет количество ссылок на объект


📝 Когда ссылок становится 0 — объект немедленно удаляется, и память освобождается.
Быстро и просто.

❗️ Проблема: не справляется с циклическими ссылками:
a = []
a.append(a) # теперь объект содержит ссылку на себя


2⃣ Поколенческий сборщик мусора (Generational GC)

Чтобы находить такие циклы, Python использует модуль gc. Все объекты отслеживаются по «возрасту»:
📝 Поколение 0 — новые объекты
📝 Поколение 1 — выжили после первой сборки
📝 Поколение 2 — считаются «старожилами»

Чем старше объект, тем реже его проверяют, чтобы не тратить ресурсы:
import gc

gc.collect() # вручную запустить сборку мусора
gc.get_count() # сколько объектов в каждом поколении
gc.get_threshold() # когда запускать сборку


Почему это важно:
📝 GC работает фоном и почти незаметно, но может вызвать лаги, если не оптимизировать.
📝 Вы можете влиять на GC: отключать, настраивать пороги, анализировать поведение.
📝 В больших проектах с долгоживущими объектами важно знать, в каком поколении что живёт.

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Бэкенд для ML-проектов: от архитектуры до подводных камней

Если вы работаете с машинным обучением в реальных продуктах, то знаете:
🔹 обучить модель — это только начало
🔹 внедрить её в стабильный продакшен — совсем другая задача

В статье разбираем:
➡️ как обрабатывать фичи в реальном времени
➡️ как версионировать данные и модели
➡️ как избежать рассинхрона между тренировкой и inference
➡️ что тормозит ML-системы в бою — и как это предсказуемо

📖 Читайте статью:
«Бэкенд под ML-проекты: особенности архитектуры и типичные узкие места»
https://proglib.io/sh/xCfXt2pH4j

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Последние 2 дня скидки на курс «AI-агенты для DS-специалистов»

Пока большинство дата-сайентистов строят модели и делают аналитику, рынок уже требует специалистов, которые создают автономные системы на базе ИИ-агентов.

Для этого мы подготовили специальный курс и собрали кучу дополнительного контента, который поможет погрузиться в тему еще глубже. Но чтобы получить все плюшки, успевайте до 1 июня.

🎁 Что вы получите при оплате курса до 1 июня:
— Промокод PROGLIBAIна 10 000 ₽ на курс, чтобы изучать AI-агентов еще выгоднее
— Эксклюзивный лонгрид по API и ML от Proglib

💡Что разберем на курсе «AI-агенты для DS-специалистов»:
— Реализацию памяти в цепочках langchain
— Полный пайплайн RAG-системы с оценкой качества
— Основы мультиагентных систем (MAS)
— Протокол MCP и фреймворк FastMCP

Промокод также действует на курсы «Математика для Data Science» и «Алгоритмы и структуры данных».

👉 Успейте до 1 июня: https://clc.to/Cttu7A
А сколько «граблей» вы прошли, прежде чем получить оффер? 😅


Библиотека питониста #развлекалово
Самые догадливые, пишите ответ в комментах 👇

Небольшая подсказка — это термин относится к Python.

Прячем ответы под спойлер, чтобы не спалить остальным.

Библиотека питониста #междусобойчик
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»

Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!

🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
🐍 Python 3.14.0 beta 2 уже доступен

Вышла вторая бета-версия Python 3.14. Это превью-версия, предназначенная для тестирования новых фич, подготовки экосистемы и сбора обратной связи.

Основные нововведения в 3.14:
✔️ PEP 649 — отложенное выполнение type hints
✔️ PEP 750 — t-строки (template strings) — как f-строки, но для кастомной обработки
✔️ PEP 784 — модуль compression.zstd с поддержкой алгоритма Zstandard
✔️ PEP 768 — интерфейс внешней отладки без накладных расходов
✔️ PEP 765 — запрет на return/break/continue из finally
✔️ PEP 758 — except и except* можно писать без скобок
✔️ Цветной вывод в unittest, argparse, json, calendar, PyREPL
✔️ Поддержка UUID v6–v8
✔️ Встроенный HMAC с проверенной реализацией
✔️ Новый тип интерпретатора с более высокой производительностью (пока эксперимент)
✔️ Новый CLI-инструмент для анализа работающих Python-процессов
✔️ pdb теперь поддерживает подключение к удалённым процессам

⚠️ Важно: это тестовая версия, не рекомендуется для продакшена. Но если вы — мейнтейнер библиотеки или инфраструктуры, сейчас отличное время, чтобы попробовать 3.14 и сообщить об ошибках до релиз-кандидатов.

📅 Следующий релиз — 3.14.0b3, запланирован на 17 июня 2025.

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 Что на самом деле происходит с увольнениями в ИТ

Каждый день в чатах разработчиков появляются сообщения «ищу работу», «команду сократили», «проект закрыли». Но никто не говорит о причинах и масштабах катастрофы. Мы запустили большое исследование, чтобы раскрыть правду!

🎯 Что мы выясним:
→ Реальные причины увольнений
→ Сколько времени нужно на поиск работы
→ Самые безумные истории смены работы

Понимая реальную ситуацию, мы сможем принимать взвешенные решения о карьере и не попасться на удочку HR-сказок.

👉 Пройдите опрос за 3 минуты и помогите всему сообществу: https://clc.to/yJ5krg
🐍 Python новости

🚀 Новые возможности и релизы:
Mojo из Python — теперь можно вызывать Mojo-код прямо из Python
Python 3.14.0 beta 2 — готовимся к новому релизу: стабильнее, удобнее, мощнее

🛠 Практика и продакшн:
Telegram-бот своими руками — от первой строки до запуска
Метаклассы в Python — объяснение, зачем и как
Форматирование строк 2.0 — новый удобный способ
Тестовые идентификаторы — где и как правильно вставлять, чтобы не страдать
Django ORM: filter vs exclude — нюансы, которые стоит знать

Библиотека питониста #свежак
Что выведет код?

👾 — 2 7
👍 — 1 5
🥰 — 1 7
⚡️ — 2 5

Библиотека задач по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Топ-вакансий для питонистов за неделю

Ведущий инженер по эксплуатации баз данных (DBA), гибрид (Москва)

Team Lead (Python) команды разработки —‍ от 350 000 до 450 000 ₽, удалёнка

ML/CV backend разработчик (python) —‍ от 300 000 до 380 000 ₽, удалёнка

AI / Prompt Engineer —‍ до 200 000 ₽, удалёнка

Python-разработчик —‍ до 570 000 ₽, удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Python jobs

Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝 Как вызвать Python из C — гайд для ресерчеров и хардкорных разработчиков

Если вы пишете код на C и Python, рано или поздно возникнет задача: как вызывать Python из C? Особенно если вы работаете с AI-исследованиями, Tensorflow, или хотите встроить скрипты в уже существующий C-проект.

Вот краткое руководство:

1⃣ Подключить Python.h:
python3-config --includes


2⃣ Включить заголовочный файл в C:

В Cmain.c:
#include <Python.h>


3⃣ Скомпилировать:
gcc Cmain.c -I/usr/include/python3.8 -lpython3.8 -o Cmain.o


4⃣ Инициализировать интерпретатор:
setenv("PYTHONPATH", "./", 1);
Py_Initialize();
// ...
Py_Finalize();


5⃣ Импортировать модуль и вызывать функцию:
PyObject *module = PyImport_ImportModule("PythonFunctions");
PyObject *func = PyObject_GetAttrString(module, "PrintList");
PyObject_CallObject(func, args);


6⃣ Аргументы (списки, числа и пр.):
Создаём через PyList_New, PyLong_FromLong, PyTuple_Pack.

7⃣ Очистка памяти:
Не забываем про Py_XDECREF(...)

▶️ Подойдёт для:
📍Встраивания ML-логики в C
📍Быстрого прототипирования
📍Работы с TensorFlow C API

▶️ Полный гайд и файлы — в детальной статье: https://clc.to/ys3cjw

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/06/15 04:34:56
Back to Top
HTML Embed Code: